/*
 * Copyright 2014 Щекотова Ангелина Александровна.
 * Этот файл — часть J4JClientServer Framework
 * J4JClientServer Framework - свободная программа: вы можете перераспространять ее и/или изменять
 * ее на условиях Меньшей Стандартной общественной лицензии GNU в том виде, в каком
 * она была опубликована Фондом свободного программного обеспечения; либо
 * версии 3 лицензии, либо (по вашему выбору) любой более поздней версии.
 *
 * J4JClientServer Framework распространяется в надежде, что она будет полезной,
 * но БЕЗО ВСЯКИХ ГАРАНТИЙ; даже без неявной гарантии ТОВАРНОГО ВИДА
 * или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Подробнее см. в Меньшей Стандартной
 * общественной лицензии GNU.
 *
 * Вы должны были получить копию Меньшей Стандартной общественной лицензии GNU
 * вместе с этой программой. Если это не так, см.
 * <http://www.gnu.org/licenses/>.
 */

package ru.java4java;

import ru.java4java.ClientServerFramework.SocketHandler;
import ru.java4java.ClientServerFramework.impl.Packet;
import ru.java4java.ClientServerFramework.interfaces.SocketHandlerListenerAdapter;
import ru.java4java.utils.SocketUtils;
import org.apache.log4j.Logger;

import java.io.IOException;

/**<pre>
 * Данный класс является тестовым классом
 * </pre>
 */
public class ClientMain {

    private static final Logger log = Logger.getLogger(ServerMain.class);

    public static void main(String[] args) throws IOException, InterruptedException {
        SocketHandler handler = new SocketHandler("127.0.0.1", 9797);
        handler.getSocket().setSoTimeout(5000);
        handler.options().setPingPacket(new Packet(new byte[0]));

        handler.options().getSocketHandlerListeners().add(new SocketHandlerListenerAdapter() {
            @Override
            public void beforeStart(SocketHandler socketHandler) {
                String message = "Hello World!";
                Packet packet = new Packet(message.getBytes());
                send(socketHandler, packet);
                send(socketHandler, packet);
            }

            @Override
            public void afterGet(SocketHandler handler) {
                Packet packet = handler.getIncoming();
                if (packet.getData().length == 0) {
                    System.out.println("Ping!");
                    handler.setOutgoing(packet); // Pong
                }
            }

            public void send(SocketHandler handler, Packet packet) {
                try {
                    handler.setOutgoing(packet);
                    handler.send();
                } catch (IOException e) {
                    String err = SocketUtils.isFullAvailable(handler.getSocket());
                    if (!err.isEmpty()) {
                        handler.shutdown();
                    }
                }
            }
        });

        Thread client = new Thread(handler);
        client.start();

        try {
            client.join();
        } catch (InterruptedException e) {
            log.error("InterruptedException", e);
        }

        System.exit(0);

    }
}
